﻿using log4net;
using Npgsql;
using PcaCaja.BOL;
using PcaCore.DAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace PcaCaja.DAL
{
    public class dSubGrupoMovimiento
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(dSubGrupoMovimiento));

        #region Public

        public static long Insert(oSubGrupoMovimiento myClass)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_caja.fn_add_subgrupo_movimiento(bigint,--grupo_movimiento_id $1
                //                   varchar,--empresa_id $2
                //                   varchar,--oficina_id $3
                //                   bigint,--sesion_id $4
                //                   varchar,--codigo $5
                //                   varchar --nombre $6
                //                   )RETURNS bigint
                object id = Core.ExecuteScalar("pca_caja.fn_add_subgrupo_movimiento",
                                                new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, myClass.grupo_movimiento_id),
                                                new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.empresa_id),
                                                new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.oficina_id),
                                                new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, myClass.sesion_id),
                                                new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.codigo),
                                                new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.nombre));

                return Convert.ToInt64(id);
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static void Update(oSubGrupoMovimiento myClass)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_caja.fn_update_subgrupo_movimiento(bigint,--subgrupo_movimiento_id $1
                //                  bigint,--grupo_movimiento_id $2
                //                  varchar,--empresa_id $3
                //                  varchar,--oficina_id $4
                //                  bigint,--sesion_id $5
                //                  varchar,--codigo $6
                //                  varchar --nombre $7
                //                  )RETURNS void
                Core.ExecuteNonQuery("pca_caja.fn_update_subgrupo_movimiento",
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, myClass.subgrupo_movimiento_id),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, myClass.grupo_movimiento_id),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.empresa_id),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.oficina_id),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint,myClass.sesion_id),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.codigo),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, myClass.nombre));
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static void Delete(long subGrupoMovimientoId,string empresaId)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_caja.fn_del_subgrupo_movimiento(bigint,--subgrupo_movimiento_id $1
                //                   varchar --empresa_id $2
                //                   )RETURNS void
                Core.ExecuteNonQuery("pca_caja.fn_del_subgrupo_movimiento",
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, subGrupoMovimientoId),
                                     new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId));
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static oSubGrupoMovimiento Get(long subGrupoMovimientoId, string empresaId)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_caja.fn_get_subgrupo_movimiento(bigint,--subgrupo_movimiento_id $1
                //                   varchar --empresa_id $2
                //                   )RETURNS SETOF pca_caja.subgrupos_movimiento
                return Core.GetObjectDb<oSubGrupoMovimiento>("pca_caja.fn_get_subgrupo_movimiento",
                                                             new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, subGrupoMovimientoId),
                                                             new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId));
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static List<oSubGrupoMovimiento> GetList(int start,
                                                        int limit,
                                                        out int totalRecords,
                                                        long grupoMovimientoId,
                                                        string empresaId)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_caja.fn_get_list_subgrupos_movimiento(integer,--start $1
                //                    integer,--limit $2
                //                    bigint,--grupo_movimiento_id $3
                //                    varchar --empresa_id $4
                //                    )RETURNS SETOF refcursor
                return Core.GetListObjecstDb<oSubGrupoMovimiento>("pca_caja.fn_get_list_subgrupos_movimiento",
                                                                  out totalRecords,
                                                                  new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, start),
                                                                  new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, limit),
                                                                  new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, grupoMovimientoId),
                                                                  new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId));
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        public static List<oSubGrupoMovimiento> GetList(int start,
                                                        int limit,
                                                        out int totalRecords,
                                                        long grupoMovimientoId,
                                                        string empresaId,
                                                        string query)
        {
            try
            {
                //CREATE OR REPLACE FUNCTION pca_caja.fn_get_list_subgrupos_movimiento(integer,--start $1
                //                    integer,--limit $2
                //                    bigint,--grupo_movimiento_id $3
                //                    varchar,--empresa_id $4
                //                    varchar --query $5
                //                    )RETURNS SETOF refcursor
                return Core.GetListObjecstDb<oSubGrupoMovimiento>("pca_caja.fn_get_list_subgrupos_movimiento",
                                                                  out totalRecords,
                                                                  new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, start),
                                                                  new oParametro(NpgsqlTypes.NpgsqlDbType.Integer, limit),
                                                                  new oParametro(NpgsqlTypes.NpgsqlDbType.Bigint, grupoMovimientoId),
                                                                  new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, empresaId),
                                                                  new oParametro(NpgsqlTypes.NpgsqlDbType.Varchar, query));
            }
            catch (Exception ex)
            {
                throw Core.LogException(log, ex, MethodBase.GetCurrentMethod().Name);
            }
        }

        #endregion
    }
}
